/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package file;


import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import modelo.GestorHistoriaClinica;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import persistencia.ColumnNames;
import pojos.Consultas;
import pojos.Ingresos;
import pojos.Intervenciones;
import pojos.Urgencias;

/**
 * Filer Helper para crear archivos excel y guardar nuestras consultas
 * @author Ⓒvenegas dam2014/2015
 */
public class FileHellper_xls_HistoriaClinica {
    
    GestorHistoriaClinica gestor;
    
    File archivo_xls;
    FileOutputStream fos;
    Workbook libro;
    CellStyle estiloCabecera;
    
    List <String> columnNamesList;// = new LinkedList();
    
    /**
     * Constructor
     * @param gestor
     */
    public FileHellper_xls_HistoriaClinica(GestorHistoriaClinica gestor){
        this.gestor = gestor;
        this.libro = new HSSFWorkbook();
        this.estiloCabecera = libro.createCellStyle();
    }
    
    /**
     * Metodo para exportar una consulta a un fichero de tipo Excel(Office)
     * @param path              //Ruta en la que guardaremos el fichero generado
     */
    public boolean exportar(String path) {
        boolean seHaExportadoConExito = false;
        
        //String rutaArchivo = System.getProperty("user.home")+"/ejemploExcelJava.xls";
        archivo_xls = new File(path);
        
        if(archivo_xls.exists())
            archivo_xls.delete();
        try {
            archivo_xls.createNewFile();
            fos = new FileOutputStream(archivo_xls);
        } catch (IOException ex) {
            Logger.getLogger(FileHellper_xls_HistoriaClinica.class.getName()).log(Level.SEVERE, null, ex);
            System.err.println("FileHellper_xls_HistoriaClinica/exportar IOException");
           
        }
        
        
        //DAMOS FORMATO A LAS CELDAS
        estiloCabecera.setFillBackgroundColor(HSSFColor.PINK.index);
        estiloCabecera.setFillForegroundColor(HSSFColor.LAVENDER.index);
        estiloCabecera.setBorderLeft(CellStyle.BORDER_DOUBLE);
        estiloCabecera.setBorderTop(CellStyle.BORDER_DOUBLE);
        estiloCabecera.setBorderRight(CellStyle.BORDER_DOUBLE);
        estiloCabecera.setBorderBottom(CellStyle.BORDER_DOUBLE);
        estiloCabecera.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
        
        
        if (gestor.getListaIntervenciones().size() > 0){
            this.addHojaIntervenciones();
        }
        
        if (gestor.getListaIngresos().size() > 0){
            this.addHojaIngresos();
        }
        
        if (gestor.getListaConsultas().size() > 0){
            this.addHojaConsultas();
        }
        
        if (gestor.getListaUrgencias().size() > 0){
            this.addHojaUrgencias();
        }
        
        
        try {
            libro.write(fos);
            fos.close();
            seHaExportadoConExito = true;
        } catch (IOException ex) {
            Logger.getLogger(FileHellper_xls_HistoriaClinica.class.getName()).log(Level.SEVERE, null, ex);
            System.err.println("FileHellper_xls_HistoriaClinica/exportar IOException");
        }
        
        return seHaExportadoConExito;
    }
    
    
    
    private void addHojaIntervenciones(){
        
        //Creamos una hoja dentro de nuestro libro xls
        Sheet hojaIntervenciones = libro.createSheet("Intervenciones");
        
        columnNamesList = ColumnNames.getColumnName("Intervenciones");
        
        int numRow = 0;
        Row fila = hojaIntervenciones.createRow(numRow);
        Cell celda;
        for (int i = 0; i < columnNamesList.size()-1; i++) {
            celda = fila.createCell(i);
            celda.setCellValue(columnNamesList.get(i));
            celda.setCellStyle(estiloCabecera);
        }
        
        //Recorremos nuestra lista de modelos y los vamos añadiendo a nustra hoja del libro xls
        for (Intervenciones intervencion : gestor.getListaIntervenciones()) {
            numRow++;
            fila = hojaIntervenciones.createRow(numRow);
            fila.createCell(0).setCellValue(intervencion.getIdIntervencion());
            System.out.println("intervencion.getFechaIntervencion() = " + intervencion.getFechaIntervencion());
            fila.createCell(1).setCellValue(intervencion.getFechaIntervencion());
            fila.createCell(2).setCellValue(intervencion.getNumQuirofano());
            fila.createCell(3).setCellValue(intervencion.getEspecialidad());
        }
        
        //Una vez rellena la hoja, la recooremos de nuevo para 'autoajustarla' al tamaño del contenido
        for (int i = 0; i < columnNamesList.size(); i++) {
                hojaIntervenciones.autoSizeColumn(i, true);
        }
        
        
    }
    
    private void addHojaIngresos(){
        
        //Creamos una hoja dentro de nuestro libro xls
        Sheet hojaIngresos = libro.createSheet("Ingresos");
        
        columnNamesList = ColumnNames.getColumnName("Ingresos");
        
        int numRow = 0;
        Row fila = hojaIngresos.createRow(numRow);
        Cell celda;
        for (int i = 0; i < columnNamesList.size()-1; i++) {
            celda = fila.createCell(i);
            celda.setCellValue(columnNamesList.get(i));
            celda.setCellStyle(estiloCabecera);
        }
        
        //Recorremos nuestra lista de modelos y los vamos añadiendo a nustra hoja del libro xls
        for (Ingresos ingreso : gestor.getListaIngresos()) {
            numRow++;
            fila = hojaIngresos.createRow(numRow);
            fila.createCell(0).setCellValue(ingreso.getIdIngreso());
            fila.createCell(1).setCellValue(ingreso.getFechaIngreso());
            fila.createCell(2).setCellValue(ingreso.getFechaAlta());
        }
        
        //Una vez rellena la hoja, la recooremos de nuevo para 'autoajustarla' al tamaño del contenido
        for (int i = 0; i < columnNamesList.size(); i++) {
                hojaIngresos.autoSizeColumn(i, true);
        }
        
        
    }
    
    private void addHojaConsultas(){
        
        //Creamos una hoja dentro de nuestro libro xls
        Sheet hojaConsultas = libro.createSheet("Consultas");
        
        columnNamesList = ColumnNames.getColumnName("Consultas");
        
        int numRow = 0;
        Row fila = hojaConsultas.createRow(numRow);
        Cell celda;
        for (int i = 0; i < columnNamesList.size()-1; i++) {
            celda = fila.createCell(i);
            celda.setCellValue(columnNamesList.get(i));
            celda.setCellStyle(estiloCabecera);
        }
        
        //Recorremos nuestra lista de modelos y los vamos añadiendo a nustra hoja del libro xls
        for (Consultas consulta : gestor.getListaConsultas()) {
            numRow++;
            fila = hojaConsultas.createRow(numRow);
            fila.createCell(0).setCellValue(consulta.getIdConsulta());
            fila.createCell(1).setCellValue(consulta.getFecha());
            fila.createCell(2).setCellValue(consulta.getHoraEntrada());
            fila.createCell(3).setCellValue(consulta.getHoraSalida());
            fila.createCell(4).setCellValue(consulta.getEspecialidad());
        }
        
        //Una vez rellena la hoja, la recooremos de nuevo para 'autoajustarla' al tamaño del contenido
        for (int i = 0; i < columnNamesList.size(); i++) {
                hojaConsultas.autoSizeColumn(i, true);
        }
        
        
    }
    
    private void addHojaUrgencias(){
        
        //Creamos una hoja dentro de nuestro libro xls
        Sheet hojaUrgencias = libro.createSheet("Urgencias");
        
        columnNamesList = ColumnNames.getColumnName("Urgencias");
        
        int numRow = 0;
        Row fila = hojaUrgencias.createRow(numRow);
        Cell celda;
        for (int i = 0; i < columnNamesList.size()-1; i++) {
            celda = fila.createCell(i);
            celda.setCellValue(columnNamesList.get(i));
            celda.setCellStyle(estiloCabecera);
        }
        
        //Recorremos nuestra lista de modelos y los vamos añadiendo a nustra hoja del libro xls
        for (Urgencias urgencia : gestor.getListaUrgencias()) {
            numRow++;
            fila = hojaUrgencias.createRow(numRow);
            fila.createCell(0).setCellValue(urgencia.getIdUrgencia());
            fila.createCell(1).setCellValue(urgencia.getFechaUrgencia());
            fila.createCell(2).setCellValue(urgencia.getFechaAlta());
        }
        
        //Una vez rellena la hoja, la recooremos de nuevo para 'autoajustarla' al tamaño del contenido
        for (int i = 0; i < columnNamesList.size(); i++) {
                hojaUrgencias.autoSizeColumn(i, true);
        }
        
        
    }
    
    
    
}
